home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / utmisc1 / ovr50711.lha / Over5 / doc / Over5protocol.doc < prev   
Text File  |  1996-05-12  |  31KB  |  1,076 lines

  1. Over5protocol.doc
  2. -----------------
  3. Copyright (c) 1995,1996 Daniel Kahlin <tlr@stacken.kth.se>
  4. (last changed 960402)
  5.  
  6. A bit incomplete, but should work for now.
  7.  
  8.  
  9. ---------------------------------------------------------------------------
  10. Over5 low level protocol specification
  11. general overview by Daniel Kahlin <tlr@stacken.kth.se>
  12.  
  13.  
  14. The low level end of the protocol is able to send and receive data blocks
  15. 1 to 256 bytes in size.  The protocol ensures that the data is correctly
  16. transferred.
  17.  
  18.  
  19.  
  20.  
  21. T  ||   name: BASIC BLOCK TRANSFER
  22. I  ||   type: low level specification
  23. M  ||   structures: <TRBLK>, <ACKBLK>
  24. E  \/
  25.  
  26.        Sender                                            Receiver
  27.        ------                                            --------
  28.  
  29.   1a  SEND <TRBLK>_   
  30.                    \__________________________________
  31.                                                       \_
  32.   1b                                                    RECEIVE <TRBLK>
  33.  
  34.  
  35.   2a                                                   _RESPOND <ACKBLK>
  36.                       ________________________________/
  37.                     _/
  38.   2b  CHECK <ACKBLK>
  39.  
  40.  
  41.  
  42.  
  43. T  ||   name: BLOCK TRANSFER WITH RESEND
  44. I  ||   type: low level specification
  45. M  ||   structures: <TRBLK>, <ACKBLK>
  46. E  \/
  47.  
  48.        Sender                                            Receiver
  49.        ------                                            --------
  50.  
  51.   1a  SEND <TRBLK>_   
  52.                    \__________X___X___________________
  53.                                                       \_
  54.   1b                                                    RECEIVE <TRBLK>
  55.  
  56.  
  57.   2a                                                   _RESPOND <ACKBLK>
  58.                       ________________________________/
  59.                     _/
  60.   2b  CHECK <ACKBLK>
  61.  
  62.  
  63.   3a  SEND <TRBLK>_   
  64.                    \__________________________________
  65.                                                       \_
  66.   3b                                                    RECEIVE <TRBLK>
  67.  
  68.  
  69.   4a                                                   _RESPOND <ACKBLK>
  70.                       ________________________________/
  71.                     _/
  72.   4b  CHECK <ACKBLK>
  73.  
  74.  
  75.  
  76.  
  77.  
  78. #define HEAD 0x7e
  79. #define CHANNEL_DATA    1
  80. #define CHANNEL_COMMAND 15
  81. #define ST_OK  0x10
  82. #define ST_RESEND   0x20
  83.  
  84.  
  85. <TRBLK>
  86. 0x00  UBYTE trblk_head;        (=HEAD)
  87. 0x01  UBYTE trblk_channel;      xy  y=channel  x=status  (status must be 0
  88.                                when doing blocksend)
  89. 0x02  UBYTE trblk_blocknum;    blocknumber (0-15)
  90. 0x03  UBYTE trblk_size;        size of the data block  (0x00 => 256 bytes)
  91. 0x04  UBYTE trblk_headsum;     xor of all the bytes up to trblk_headsum and
  92.                                including trblk_head must be 0
  93. 0x05  UBYTE trblk_body[trblk_size];    the data
  94. 0x05+trblk_size
  95.       UBYTE trblk_bodysum;     xor of the body and trblk_bodysum must be 0
  96.  
  97.  
  98. <ACKBLK>
  99. 0x00  UBYTE ackblk_head;       (=HEAD)
  100. 0x01  UBYTE ackblk_channel;     xy  y=channel  x=status 
  101.                                (ST_OK or ST_RESEND)
  102. 0x02  UBYTE ackblk_blocknum;   blocknumber (0-15)
  103. 0x03  UBYTE ackblk_size;       size of the data block  (0x00 => 256 bytes)
  104. 0x04  UBYTE ackblk_headsum;    xor of all the bytes up to ackblk_headsum and
  105.                                including ackblk_head must be 0
  106.  
  107.  
  108.  
  109. /END
  110.  
  111.  
  112. ---------------------------------------------------------------------------
  113. Over5 high level protocol specification
  114. general overview by Daniel Kahlin <tlr@stacken.kth.se>
  115.  
  116. Contents:
  117.  
  118. TYPE_MEMTRANSFER:
  119.   WRITEMEM
  120.   READMEM 
  121.   SYS
  122.   RUN
  123.  
  124. TYPE_DISKCOMMAND:
  125.   DIRECTORY
  126.   STATUS
  127.   COMMAND
  128.  
  129. TYPE_FILETRANSFER:
  130.   WRITEFILE
  131.   READFILE
  132.  
  133. TYPE_RAWDISKTRANSFER:
  134.   WRITETRACK
  135.   READTRACK
  136.   WRITESECTOR
  137.   READSECTOR
  138.  
  139. TYPE_SERVER:
  140.   SERVERLOAD
  141.   SERVERSAVE
  142.   SERVERCOMMAND
  143.   SERVERREADSTRING
  144.  
  145.  
  146. *** WRITEMEM *** WRITEMEM *** WRITEMEM *** WRITEMEM *** WRITEMEM *** WRITEM
  147.  
  148. T  ||   name: WRITEMEM (part of TYPE_MEMTRANSFER)
  149. I  ||   type: high level specification
  150. M  ||   structures: <WMHD>, <RS>
  151. E  \/
  152.  
  153.        Amiga                                             c64
  154.        -----                                             ---
  155.  
  156.   1a  SEND <WMHD>_   
  157.                   \___________________________________
  158.                                                       \_
  159.   1b                                                    RECEIVE <WMHD>
  160.  
  161.  
  162.   2a                                                   _RESPOND <RS>
  163.                       ________________________________/
  164.                     _/
  165.   2b  CHECK RESPONSE
  166.  
  167. -- if (RESP!=OK) -> FAIL
  168.  
  169.   3a  SEND BODY_
  170.                 \_____________________________________
  171.                                                       \_
  172.   3b                                                    RECEIVE BODY
  173.  
  174.  
  175.   4a                                                   _RESPOND <RS>
  176.                       ________________________________/
  177.                     _/
  178.   4b  CHECK RESPONSE
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185. *** READMEM *** READMEM *** READMEM *** READMEM *** READMEM *** READMEM ***
  186.  
  187. T  ||   name: READMEM (part of TYPE_MEMTRANSFER)
  188. I  ||   type: high level specification
  189. M  ||   structures: <RMHD>, <RS>
  190. E  \/
  191.  
  192.        Amiga                                             c64
  193.        -----                                             ---
  194.  
  195.   1a  SEND <RMHD>_   
  196.                   \___________________________________
  197.                                                       \_
  198.   1b                                                    RECEIVE <RMHD>
  199.  
  200.  
  201.   2a                                                   _RESPOND <RS>
  202.                       ________________________________/
  203.                     _/
  204.   2b  CHECK RESPONSE
  205.  
  206. -- if (RESP!=OK) -> FAIL
  207.  
  208.   3a                                                   _SEND BODY
  209.                     __________________________________/
  210.                   _/
  211.   3b  RECEIVE BODY
  212.  
  213.  
  214.   4a  RESPOND <RS>_
  215.                    \__________________________________
  216.                                                       \_
  217.   4b                                                    CHECK RESPONSE
  218.  
  219.  
  220.  
  221.  
  222.  
  223. *** SYS *** SYS *** SYS *** SYS *** SYS *** SYS *** SYS *** SYS *** SYS ***
  224.  
  225. T  ||   name: SYS (part of TYPE_MEMTRANSFER)
  226. I  ||   type: high level specification
  227. M  ||   structures: <SYHD>, <RS>
  228. E  \/
  229.  
  230.        Amiga                                             c64
  231.        -----                                             ---
  232.  
  233.   1a  SEND <SYHD>_   
  234.                   \___________________________________
  235.                                                       \_
  236.   1b                                                    RECEIVE <SYHD>
  237.  
  238.  
  239.   2a                                                   _RESPOND <RS>
  240.                       ________________________________/
  241.                     _/
  242.   2b  CHECK RESPONSE
  243.  
  244.  
  245.  
  246.  
  247.  
  248. *** RUN *** RUN *** RUN *** RUN *** RUN *** RUN *** RUN *** RUN *** RUN ***
  249.  
  250. T  ||   name: RUN (part of TYPE_MEMTRANSFER)
  251. I  ||   type: high level specification
  252. M  ||   structures: <RUHD>, <RS>
  253. E  \/
  254.  
  255.        Amiga                                             c64
  256.        -----                                             ---
  257.  
  258.   1a  SEND <RUHD>_   
  259.                   \___________________________________
  260.                                                       \_
  261.   1b                                                    RECEIVE <RUHD>
  262.  
  263.  
  264.   2a                                                   _RESPOND <RS>
  265.                       ________________________________/
  266.                     _/
  267.   2b  CHECK RESPONSE
  268.  
  269.  
  270.  
  271.  
  272.  
  273. *** DIRECTORY *** DIRECTORY *** DIRECTORY *** DIRECTORY *** DIRECTORY *** D
  274.  
  275. T  ||   name: DIRECTORY (part of TYPE_DISKCOMMAND)
  276. I  ||   type: high level specification
  277. M  ||   structures: <DRHD>, <DRRS>, <RS>
  278. E  \/
  279.  
  280.        Amiga                                             c64
  281.        -----                                             ---
  282.  
  283.   1a  SEND <DRHD>_   
  284.                   \___________________________________
  285.                                                       \_
  286.   1b                                                    RECEIVE <DRHD>
  287.  
  288.  
  289.   2a                                                   _RESPOND <RS>
  290.                       ________________________________/
  291.                     _/
  292.   2b  CHECK RESPONSE
  293.  
  294. -- if (RESP!=OK) -> FAIL
  295.  
  296.   3a                                                   _RESPOND <DRRS>
  297.                       ________________________________/
  298.                     _/
  299.   3b  CHECK RESPONSE
  300.  
  301. -- if (RESP!=OK) -> FAIL
  302.  
  303.   4a  RESPOND <RS>_
  304.                    \__________________________________
  305.                                                       \_
  306.   4b                                                    CHECK RESPONSE
  307.  
  308.  
  309.   5a                                                   _SEND BODY
  310.                     __________________________________/
  311.                   _/
  312.   5b  RECEIVE BODY
  313.  
  314.  
  315.   6a  RESPOND <RS>_
  316.                    \__________________________________
  317.                                                       \_
  318.   6b                                                    CHECK RESPONSE
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325. *** STATUS *** STATUS *** STATUS *** STATUS *** STATUS *** STATUS *** STATU
  326.  
  327. T  ||   name: STATUS (part of TYPE_DISKCOMMAND)
  328. I  ||   type: high level specification
  329. M  ||   structures: <STHD>, <RS>
  330. E  \/
  331.  
  332.        Amiga                                             c64
  333.        -----                                             ---
  334.  
  335.   1a  SEND <STHD>_   
  336.                   \___________________________________
  337.                                                       \_
  338.   1b                                                    RECEIVE <STHD>
  339.  
  340.  
  341.   2a                                                   _RESPOND <RS>
  342.                       ________________________________/
  343.                     _/
  344.   2b  CHECK RESPONSE
  345.  
  346. -- if (RESP!=OK) -> FAIL
  347.  
  348.   3a                                                   _SEND BLOCK
  349.                      _________________________________/
  350.                    _/
  351.   3b  RECEIVE BLOCK
  352.  
  353.  
  354.   4a  RESPOND <RS>_
  355.                    \__________________________________
  356.                                                       \_
  357.   4b                                                    CHECK RESPONSE
  358.  
  359.  
  360.  
  361.  
  362. *** COMMAND *** COMMAND *** COMMAND *** COMMAND *** COMMAND *** COMMAND ***
  363.  
  364. T  ||   name: COMMAND (part of TYPE_DISKCOMMAND)
  365. I  ||   type: high level specification
  366. M  ||   structures: <CMHD>, <RS>
  367. E  \/
  368.  
  369.        Amiga                                             c64
  370.        -----                                             ---
  371.  
  372.   1a  SEND <CMHD>_   
  373.                   \___________________________________
  374.                                                       \_
  375.   1b                                                    RECEIVE <CMHD>
  376.  
  377.  
  378.   2a                                                   _RESPOND <RS>
  379.                       ________________________________/
  380.                     _/
  381.   2b  CHECK RESPONSE
  382.  
  383. -- if (RESP!=OK) -> FAIL
  384.  
  385.   3a  SEND BLOCK_
  386.                  \___________________________________
  387.                                                      \_
  388.   3b                                                   RECEIVE BLOCK
  389.  
  390.  
  391.   4a                                                   _RESPOND <RS>
  392.                       ________________________________/
  393.                     _/
  394.   4b  CHECK RESPONSE
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401. *** WRITEFILE *** WRITEFILE *** WRITEFILE *** WRITEFILE *** WRITEFILE *** W
  402.  
  403. T  ||   name: WRITEFILE (part of TYPE_FILETRANSFER)
  404. I  ||   type: high level specification
  405. M  ||   structures: <WFHD>, <RS>
  406. E  \/
  407.  
  408.        Amiga                                             c64
  409.        -----                                             ---
  410.  
  411.   1a  SEND <WFHD>_   
  412.                   \___________________________________
  413.                                                       \_
  414.   1b                                                    RECEIVE <WFHD>
  415.  
  416.  
  417.   2a                                                   _RESPOND <RS>
  418.                       ________________________________/
  419.                     _/
  420.   2b  CHECK RESPONSE
  421.  
  422. -- if (RESP!=OK) -> FAIL
  423.  
  424.   3a  SEND BODY_
  425.                 \_____________________________________
  426.                                                       \_
  427.   3b                                                    RECEIVE BODY
  428.  
  429.  
  430.   4a                                                   _RESPOND <RS>
  431.                       ________________________________/
  432.                     _/
  433.   4b  CHECK RESPONSE
  434.  
  435.  
  436.  
  437.  
  438.  
  439. *** READFILE *** READFILE *** READFILE *** READFILE *** READFILE *** READFI
  440.  
  441. T  ||   name: READFILE (part of TYPE_DISKCOMMAND)
  442. I  ||   type: high level specification
  443. M  ||   structures: <RFHD>, <RFRS>, <RS>
  444. E  \/
  445.  
  446.        Amiga                                             c64
  447.        -----                                             ---
  448.  
  449.   1a  SEND <RFHD>_   
  450.                   \___________________________________
  451.                                                       \_
  452.   1b                                                    RECEIVE <RFHD>
  453.  
  454.  
  455.   2a                                                   _RESPOND <RS>
  456.                       ________________________________/
  457.                     _/
  458.   2b  CHECK RESPONSE
  459.  
  460. -- if (RESP!=OK) -> FAIL
  461.  
  462.   3a                                                   _RESPOND <RFRS>
  463.                       ________________________________/
  464.                     _/
  465.   3b  CHECK RESPONSE
  466.  
  467. -- if (RESP!=OK) -> FAIL
  468.  
  469.   4a  RESPOND <RS>_
  470.                    \__________________________________
  471.                                                       \_
  472.   4b                                                    CHECK RESPONSE
  473.  
  474.  
  475.   5a                                                   _SEND BODY
  476.                     __________________________________/
  477.                   _/
  478.   5b  RECEIVE BODY
  479.  
  480.  
  481.   6a  RESPOND <RS>_
  482.                    \__________________________________
  483.                                                       \_
  484.   6b                                                    CHECK RESPONSE
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491. *** WRITETRACK *** WRITETRACK *** WRITETRACK *** WRITETRACK *** WRITETRACK 
  492.  
  493. T  ||   name: WRITETRACK (part of TYPE_RAWDISKTRANSFER)
  494. I  ||   type: high level specification
  495. M  ||   structures: <WTHD>, <RS>
  496. E  \/
  497.  
  498.        Amiga                                             c64
  499.        -----                                             ---
  500.  
  501.   1a  SEND <WTHD>_   
  502.                   \___________________________________
  503.                                                       \_
  504.   1b                                                    RECEIVE <WTHD>
  505.  
  506.  
  507.   2a                                                   _RESPOND <RS>
  508.                       ________________________________/
  509.                     _/
  510.   2b  CHECK RESPONSE
  511.  
  512. -- if (RESP!=OK) -> FAIL
  513.  
  514.   3a  SEND BODY_
  515.                 \_____________________________________
  516.                                                       \_
  517.   3b                                                    RECEIVE BODY
  518.  
  519.   4a                                                   _RESPOND <RS>
  520.                       ________________________________/
  521.                     _/
  522.   4b  CHECK RESPONSE
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529. *** READTRACK *** READTRACK *** READTRACK *** READTRACK *** READTRACK *** R
  530.  
  531. T  ||   name: READTRACK (part of TYPE_RAWDISKTRANSFER)
  532. I  ||   type: high level specification
  533. M  ||   structures: <RTHD>, <RS>
  534. E  \/
  535.  
  536.        Amiga                                             c64
  537.        -----                                             ---
  538.  
  539.   1a  SEND <RTHD>_   
  540.                   \___________________________________
  541.                                                       \_
  542.   1b                                                    RECEIVE <RTHD>
  543.  
  544.  
  545.   2a                                                   _RESPOND <RS>
  546.                       ________________________________/
  547.                     _/
  548.   2b  CHECK RESPONSE
  549.  
  550. -- if (RESP!=OK) -> FAIL
  551.  
  552.   3a                                                   _RESPOND <RS>
  553.                       ________________________________/
  554.                     _/
  555.   3b  CHECK RESPONSE
  556.  
  557. -- if (RESP!=OK) -> FAIL
  558.  
  559.   4a  RESPOND <RS>_
  560.                    \__________________________________
  561.                                                       \_
  562.   4b                                                    CHECK RESPONSE
  563.  
  564.  
  565.   5a                                                   _SEND BODY
  566.                     __________________________________/
  567.                   _/
  568.   5b  RECEIVE BODY
  569.  
  570.  
  571.   6a  RESPOND <RS>_
  572.                    \__________________________________
  573.                                                       \_
  574.   6b                                                    CHECK RESPONSE
  575.  
  576.  
  577.  
  578.  
  579.  
  580. *** WRITESECTOR *** WRITESECTOR *** WRITESECTOR *** WRITESECTOR *** WRITESE
  581.  
  582. T  ||   name: WRITESECTOR (part of TYPE_RAWDISKTRANSFER)
  583. I  ||   type: high level specification
  584. M  ||   structures: <WSHD>, <RS>
  585. E  \/
  586.  
  587.        Amiga                                             c64
  588.        -----                                             ---
  589.  
  590.   1a  SEND <WSHD>_   
  591.                   \___________________________________
  592.                                                       \_
  593.   1b                                                    RECEIVE <WSHD>
  594.  
  595.  
  596.   2a                                                   _RESPOND <RS>
  597.                       ________________________________/
  598.                     _/
  599.   2b  CHECK RESPONSE
  600.  
  601. -- if (RESP!=OK) -> FAIL
  602.  
  603.   3a  SEND BODY_
  604.                 \_____________________________________
  605.                                                       \_
  606.   3b                                                    RECEIVE BODY
  607.  
  608.  
  609.   4a                                                   _RESPOND <RS>
  610.                       ________________________________/
  611.                     _/
  612.   4b  CHECK RESPONSE
  613.  
  614.  
  615.  
  616.  
  617.  
  618. *** READSECTOR *** READSECTOR *** READSECTOR *** READSECTOR *** READSECTOR 
  619.  
  620. T  ||   name: READSECTOR (part of TYPE_RAWDISKTRANSFER)
  621. I  ||   type: high level specification
  622. M  ||   structures: <RSHD>, <RS>
  623. E  \/
  624.  
  625.        Amiga                                             c64
  626.        -----                                             ---
  627.  
  628.   1a  SEND <RSHD>_   
  629.                   \___________________________________
  630.                                                       \_
  631.   1b                                                    RECEIVE <RSHD>
  632.  
  633.  
  634.   2a                                                   _RESPOND <RS>
  635.                       ________________________________/
  636.                     _/
  637.   2b  CHECK RESPONSE
  638.  
  639. -- if (RESP!=OK) -> FAIL
  640.  
  641.   3a                                                   _RESPOND <RS>
  642.                       ________________________________/
  643.                     _/
  644.   3b  CHECK RESPONSE
  645.  
  646. -- if (RESP!=OK) -> FAIL
  647.  
  648.   4a                                                   _SEND BODY
  649.                     __________________________________/
  650.                   _/
  651.   4b  RECEIVE BODY
  652.  
  653.  
  654.   5a  RESPOND <RS>_
  655.                    \__________________________________
  656.                                                       \_
  657.   5b                                                    CHECK RESPONSE
  658.  
  659.  
  660.  
  661.  
  662.  
  663. *** SERVERLOAD *** SERVERLOAD *** SERVERLOAD *** SERVERLOAD *** SERVERLOAD 
  664.  
  665. T  ||   name: SERVERLOAD (part of TYPE_SERVER)
  666. I  ||   type: high level specification
  667. M  ||   structures: <SRVLDHD>, <SRVLDRS>, <SRVLDRS2>, <RS>
  668. E  \/
  669.  
  670.        Amiga                                             c64
  671.        -----                                             ---
  672.  
  673.   1a                                                   _SEND <SRVLDHD>
  674.                          _____________________________/
  675.                        _/
  676.   1b  RECEIVE <SRVLDHD>
  677.  
  678.  
  679.   2a  RESPOND <SRVLDRS>_
  680.                         \_____________________________
  681.                                                       \_
  682.   2b                                                    CHECK RESPONSE
  683.  
  684. --                                                   if (RESP!=OK) -> FAIL
  685.  
  686.   3a                                                   _RESPOND <SRVLDRS2>
  687.                       ________________________________/
  688.                     _/
  689.   3b  CHECK RESPONSE
  690.  
  691. -- if (RESP!=OK) -> FAIL
  692.  
  693.   4a  SEND BODY_
  694.                 \_____________________________________
  695.                                                       \_
  696.   4b                                                    RECEIVE BODY
  697.  
  698.  
  699.   5a                                                   _RESPOND <RS>
  700.                       ________________________________/
  701.                     _/
  702.   5b  CHECK RESPONSE
  703.  
  704.  
  705.  
  706.  
  707.  
  708. *** SERVERSAVE *** SERVERSAVE *** SERVERSAVE *** SERVERSAVE *** SERVERSAVE 
  709.  
  710. T  ||   name: SERVERSAVE (part of TYPE_SERVER)
  711. I  ||   type: high level specification
  712. M  ||   structures: <SRVSVHD>, <RS>
  713. E  \/
  714.  
  715.        Amiga                                             c64
  716.        -----                                             ---
  717.  
  718.   1a                                                   _SEND <SRVSVHD>
  719.                          _____________________________/
  720.                        _/
  721.   1b  RECEIVE <SRVSVHD>
  722.  
  723.  
  724.   2a  RESPOND <RS>_
  725.                    \__________________________________
  726.                                                       \_
  727.   2b                                                    CHECK RESPONSE
  728.  
  729. --                                                   if (RESP!=OK) -> FAIL
  730.  
  731.   3a                                                   _SEND BODY
  732.                     __________________________________/
  733.                   _/
  734.   3b  RECEIVE BODY
  735.  
  736.  
  737.   4a  RESPOND <RS>_
  738.                    \__________________________________
  739.                                                       \_
  740.   4b                                                    CHECK RESPONSE
  741.  
  742.  
  743.  
  744.  
  745. *** SERVERCOMMAND *** SERVERCOMMAND *** SERVERCOMMAND *** SERVERCOMMAND ***
  746.  
  747. T  ||   name: SERVERCOMMAND (part of TYPE_SERVER)
  748. I  ||   type: high level specification
  749. M  ||   structures: <SRVCMHD>, <RS>
  750. E  \/
  751.  
  752.        Amiga                                             c64
  753.        -----                                             ---
  754.  
  755.   1a                                                   _SEND <SRVCMHD>
  756.                          _____________________________/
  757.                        _/
  758.   1b  RECEIVE <SRVCMHD>
  759.  
  760.  
  761.   2a  RESPOND <RS>_
  762.                    \__________________________________
  763.                                                       \_
  764.   2b                                                    CHECK RESPONSE
  765.  
  766. --                                                   if (RESP!=OK) -> FAIL
  767.  
  768.   3a  RESPOND <RS>_
  769.                    \__________________________________
  770.                                                       \_
  771.   3b                                                    CHECK RESPONSE
  772.  
  773.  
  774.  
  775.  
  776.  
  777. *** SERVERREADSTRING *** SERVERREADSTRING *** SERVERREADSTRING *** SERVERRE
  778.  
  779. T  ||   name: SERVERREADSTRING (part of TYPE_SERVER)
  780. I  ||   type: high level specification
  781. M  ||   structures: <SRVRSHD>, <SRVRSRS>, <RS>
  782. E  \/
  783.  
  784.        Amiga                                             c64
  785.        -----                                             ---
  786.  
  787.   1a                                                   _SEND <SRVRSHD>
  788.                          _____________________________/
  789.                        _/
  790.   1b  RECEIVE <SRVRSHD>
  791.  
  792.  
  793.   2a  RESPOND <SRVRSRS>_
  794.                         \_____________________________
  795.                                                       \_
  796.   2b                                                    CHECK RESPONSE
  797.  
  798. --                                                   if (RESP!=OK) -> FAIL
  799.  
  800.   3a                                                   _RESPOND <RS>
  801.                       ________________________________/
  802.                     _/
  803.   3b  CHECK RESPONSE
  804.  
  805.  
  806.   4a  SEND BODY_
  807.                 \_____________________________________
  808.                                                       \_
  809.   4b                                                    RECEIVE BODY
  810.  
  811.  
  812.  
  813. /END
  814.  
  815. ---------------------------------------------------------------------------
  816. Over5 high level protocol specification
  817. structures in detail by Daniel Kahlin <tlr@stacken.kth.se>
  818.  
  819. All information sent on CHANNEL_COMMAND should begin with the structures
  820. <OHD> and <RS>.  This allows us to easily detect protocol errors.
  821.  
  822. <OHD>                    general request
  823. 0x00  UBYTE ohd_type;
  824. 0x01  UBYTE ohd_subtype;
  825.  
  826. <RS>                     general response
  827. 0x00  UBYTE rs_response;
  828.  
  829. The distinction between an <OHD> and an <RS> can be made using the first
  830. byte.  If MSB is 1, it is an <RS> else it is an <OHD>.
  831. The list below contains all types and responses.
  832.  
  833.   #define TYPE_MEMTRANSFER     0x01
  834.   #define TYPE_FILETRANSFER    0x02
  835.   #define TYPE_DISKCOMMAND     0x03
  836.   #define TYPE_TESTCOMMAND     0x04
  837.   #define TYPE_SERVER          0x05
  838.   #define TYPE_RAWDISKTRANSFER 0x06
  839.   #define RESP_OK              0x80
  840.   #define RESP_NOTSUPPORTED    0x81
  841.   #define RESP_ERROR           0x82
  842.   #define RESP_STRING          0x83
  843.  
  844. The 'type' field can be used to easily determine if a certain chunk of
  845. commands are supported.  When the 'type' field has been evaluated you
  846. should jump to appropriate routine which in its turn evaluates the
  847. 'subtype' field. These subtypes apply:
  848.  
  849.   #define SUB_MT_WRITEMEM      0x01     ;TYPE_MEMTRANSFER
  850.   #define SUB_MT_READMEM       0x02
  851.   #define SUB_MT_SYS           0x03
  852.   #define SUB_MT_RUN           0x04
  853.  
  854.   #define SUB_FT_WRITEFILE     0x01     ;TYPE_FILETRANSFER
  855.   #define SUB_FT_READFILE      0x02
  856.  
  857.   #define SUB_DC_DIRECTORY     0x01     ;TYPE_DISKCOMMAND
  858.   #define SUB_DC_STATUS        0x02
  859.   #define SUB_DC_COMMAND       0x03
  860.  
  861.   #define SUB_TC_BLOCKTEST     0x01     ;TYPE_TESTCOMMAND
  862.   #define SUB_TC_FILETEST      0x02
  863.  
  864.   #define SUB_SRV_LOAD         0x01     ;TYPE_SERVER
  865.   #define SUB_SRV_SAVE         0x02
  866.   #define SUB_SRV_COMMAND      0x03
  867.   #define SUB_SRV_READSTRING   0x04
  868.  
  869.   #define SUB_RT_WRITETRACK    0x01     ;TYPE_RAWDISKTRANSFER
  870.   #define SUB_RT_READTRACK     0x02
  871.   #define SUB_RT_WRITESECTOR   0x03
  872.   #define SUB_RT_READSECTOR    0x04
  873.  
  874.  
  875. Here follows a detailed specification of all structures currently
  876. used by the high level protocol.
  877.  
  878.  
  879. <WMHD>
  880. 0x00  UBYTE wmhd_type;        (=TYPE_MEMTRANSFER)
  881. 0x01  UBYTE wmhd_subtype;     (=SUB_MT_WRITEMEM)
  882. 0x02  UBYTE wmhd_start_l; \ start address in c64 memory
  883. 0x03  UBYTE wmhd_start_h; /
  884. 0x04  UBYTE wmhd_end_l;  \ end address in c64 memory
  885. 0x05  UBYTE wmhd_end_h;  /
  886.  
  887.  
  888. <RMHD>
  889. 0x00  UBYTE rmhd_type;        (=TYPE_MEMTRANSFER)
  890. 0x01  UBYTE rmhd_subtype;     (=SUB_MT_READMEM)
  891. 0x02  UBYTE rmhd_start_l; \ start address in c64 memory
  892. 0x03  UBYTE rmhd_start_h; /
  893. 0x04  UBYTE rmhd_end_l;  \ end address in c64 memory
  894. 0x05  UBYTE rmhd_end_h;  /
  895.  
  896.  
  897. <SYHD>
  898. 0x00  UBYTE syhd_type;        (=TYPE_MEMTRANSFER)
  899. 0x01  UBYTE syhd_subtype;     (=SUB_MT_SYS)
  900. 0x02  UBYTE syhd_pc_l; \   6502 program counter
  901. 0x03  UBYTE syhd_pc_h; /
  902. 0x04  UBYTE syhd_memory;   $01 value for the c64
  903. 0x05  UBYTE syhd_sr;       6502 status register
  904. 0x06  UBYTE syhd_ac;       6502 accumulator
  905. 0x07  UBYTE syhd_xr;       6502 X register
  906. 0x08  UBYTE syhd_yr;       6502 Y register
  907. 0x09  UBYTE syhd_sp;       6502 stack pointer
  908.  
  909.  
  910. <RUHD>
  911. 0x00  UBYTE ruhd_type;        (=TYPE_MEMTRANSFER)
  912. 0x01  UBYTE ruhd_subtype;     (=SUB_MT_RUN)
  913. 0x02  UBYTE ruhd_lowmem_l; \   start of basic program
  914. 0x03  UBYTE ruhd_lowmem_h; /
  915. 0x04  UBYTE ruhd_himem_l; \   end of basic program
  916. 0x05  UBYTE ruhd_himem_h; /
  917.  
  918.  
  919. <DRHD>
  920. 0x00  UBYTE drhd_type;        (=TYPE_DISKCOMMAND)
  921. 0x01  UBYTE drhd_subtype;     (=SUB_DC_DIRECTORY)
  922. 0x02  UBYTE drhd_pad[2];
  923. 0x04  UBYTE drhd_device;        device number
  924. 0x05  UBYTE drhd_filename[24];  filename
  925.  
  926.  
  927. <DRRS>
  928. 0x00  UBYTE drrs_response;    response code
  929. 0x01  UBYTE drrs_len_l; \      length of directory in bytes
  930. 0x02  UBYTE drrs_len_h; /
  931.  
  932.  
  933. <STHD>
  934. 0x00  UBYTE sthd_type;        (=TYPE_DISKCOMMAND)
  935. 0x01  UBYTE sthd_subtype;     (=SUB_DC_STATUS)
  936. 0x02  UBYTE sthd_pad[2];
  937. 0x04  UBYTE sthd_device;        device number
  938.  
  939.  
  940. <CMHD>
  941. 0x00  UBYTE cmhd_type;        (=TYPE_DISKCOMMAND)
  942. 0x01  UBYTE cmhd_subtype;     (=SUB_DC_COMMAND)
  943. 0x02  UBYTE cmhd_pad[2];
  944. 0x04  UBYTE cmhd_device;        device number
  945.  
  946.  
  947. <WFHD>
  948. 0x00  UBYTE wfhd_type;         (=TYPE_FILETRANSFER)
  949. 0x01  UBYTE wfhd_subtype;      (=SUB_FT_WRITEFILE)
  950. 0x02  UBYTE wfhd_len_l;    \   length of file
  951. 0x03  UBYTE wfhd_len_h;    /
  952. 0x04  UBYTE wfhd_device;        device number
  953. 0x05  UBYTE wfhd_filename[24];  filename
  954.  
  955.  
  956. <RFHD>
  957. 0x00  UBYTE rfhd_type;         (=TYPE_FILETRANSFER)
  958. 0x01  UBYTE rfhd_subtype;      (=SUB_FT_READFILE)
  959. 0x02  UBYTE rfhd_pad[2];
  960. 0x04  UBYTE rfhd_device;        device number
  961. 0x05  UBYTE rfhd_filename[24];  filename
  962.  
  963.  
  964. <RFRS>
  965. 0x00  UBYTE rfrs_response;    response code
  966. 0x01  UBYTE rfrs_len_l; \      length of file in bytes
  967. 0x02  UBYTE rfrs_len_h; /
  968.  
  969.  
  970. <WTHD>
  971. 0x00  UBYTE wthd_type;         (=TYPE_RAWDISKTRANSFER)
  972. 0x01  UBYTE wthd_subtype;      (=SUB_RT_WRITETRACK)
  973. 0x02  UBYTE wthd_track;        track to write
  974. 0x03  UBYTE wthd_numtracks;    number of tracks to be written
  975. 0x04  UBYTE wthd_device;        device number
  976.  
  977.  
  978. <RTHD>
  979. 0x00  UBYTE wthd_type;         (=TYPE_RAWDISKTRANSFER)
  980. 0x01  UBYTE wthd_subtype;      (=SUB_RT_READTRACK)
  981. 0x02  UBYTE wthd_track;        track to read
  982. 0x03  UBYTE wthd_numtracks;    number of tracks to be read
  983. 0x04  UBYTE wthd_device;        device number
  984.  
  985.  
  986. <RTRS>
  987. 0x00  UBYTE rtrs_response;    response code
  988. 0x01  UBYTE rtrs_sectors;      number of sectors
  989.  
  990.  
  991. <WSHD>
  992. 0x00  UBYTE wshd_type;         (=TYPE_RAWDISKTRANSFER)
  993. 0x01  UBYTE wshd_subtype;      (=SUB_RT_WRITESECTOR)
  994. 0x02  UBYTE wshd_track;        track to write
  995. 0x03  UBYTE wshd_sector;       sector to write
  996. 0x04  UBYTE wshd_device;        device number
  997.  
  998.  
  999. <RSHD>
  1000. 0x00  UBYTE rshd_type;         (=TYPE_RAWDISKTRANSFER)
  1001. 0x01  UBYTE rshd_subtype;      (=SUB_RT_READSECTOR)
  1002. 0x02  UBYTE rshd_track;        track to read
  1003. 0x03  UBYTE rshd_sector;       sector to read
  1004. 0x04  UBYTE rshd_device;        device number
  1005.  
  1006.  
  1007. <BTHD>
  1008. 0x00  UBYTE bthd_type;         (=TYPE_TESTCOMMAND)
  1009. 0x01  UBYTE bthd_subtype;      (=SUB_TC_BLOCKTEST)
  1010.  
  1011.  
  1012. <FTHD>
  1013. 0x00  UBYTE fthd_type;         (=TYPE_TESTCOMMAND)
  1014. 0x01  UBYTE fthd_subtype;      (=SUB_TC_FILETEST)
  1015. 0x02  UBYTE fthd_len_l;  \  length of test data in bytes
  1016. 0x03  UBYTE fthd_len_h;  / 
  1017.  
  1018.  
  1019. <FTRS>
  1020. 0x00  UBYTE ftrs_response;    response code
  1021. 0x01  UBYTE ftrs_len_l; \      length of file in bytes
  1022. 0x02  UBYTE ftrs_len_h; /
  1023.  
  1024.  
  1025. <SRVLDHD>
  1026. 0x00  UBYTE srvldhd_type;         (=TYPE_SERVER)
  1027. 0x01  UBYTE srvldhd_subtype;      (=SUB_SRV_LOAD)
  1028. 0x02  UBYTE srvldhd_pad[4];
  1029. 0x06  UBYTE srvldhd_filename[64];  filename to load 
  1030.  
  1031.  
  1032. <SRVLDRS>
  1033. 0x00  UBYTE srvldrs_response;    response code
  1034. 0x01  UBYTE srvldrs_start_l; \      start address of file
  1035. 0x02  UBYTE srvldrs_start_h; / 
  1036. 0x03  UBYTE srvldrs_end_h; \     end address of file
  1037. 0x04  UBYTE srvldrs_end_h; /
  1038.  
  1039.  
  1040. <SRVLDRS2>
  1041. 0x00  UBYTE srvldrs2_response;    response code
  1042. 0x01  UBYTE srvldrs2_start_l; \      new start address
  1043. 0x02  UBYTE srvldrs2_start_h; / 
  1044.  
  1045.  
  1046. <SRVSVHD>
  1047. 0x00  UBYTE srvsvhd_type;         (=TYPE_SERVER)
  1048. 0x01  UBYTE srvsvhd_subtype;      (=SUB_SRV_SAVE)
  1049. 0x02  UBYTE srvsvhd_start_l; \      start address of file
  1050. 0x03  UBYTE srvsvhd_start_h; / 
  1051. 0x04  UBYTE srvsvhd_end_h; \     end address of file
  1052. 0x05  UBYTE srvsvhd_end_h; /
  1053. 0x06  UBYTE srvsvhd_filename[64];  filename to load 
  1054.  
  1055.  
  1056. <SRVCMHD>
  1057. 0x00  UBYTE srvcmhd_type;         (=TYPE_SERVER)
  1058. 0x01  UBYTE srvcmhd_subtype;      (=SUB_SRV_COMMAND)
  1059. 0x02  UBYTE srvcmhd_pad[4];
  1060. 0x06  UBYTE srvcmhd_command[64];  the command
  1061.  
  1062.  
  1063. <SRVRSHD>
  1064. 0x00  UBYTE srvrshd_type;         (=TYPE_SERVER)
  1065. 0x01  UBYTE srvrshd_subtype;      (=SUB_SRV_READSTRING)
  1066. 0x02  UBYTE srvrshd_width;     width of destination screen
  1067. 0x03  UBYTE srvrshd_height;    height of destination screen
  1068.  
  1069.  
  1070. <SRVRSRS>
  1071. 0x00  UBYTE srvrsrs_response;    response code
  1072. 0x01  UBYTE srvrsrs_rows;        number of actual rows
  1073.  
  1074.  
  1075. /END
  1076.